package com.bzkj.basicinfo.service;

import com.bzkj.basicinfo.domain.CustomerMapping;
import com.bzkj.common.core.domain.AjaxResult;

import java.util.List;

/**
 * 往来单位映射关系服务接口
 * 
 * @author system
 * @date 2025-01-29
 */
public interface CustomerMappingService {
    
    /**
     * 查询往来单位映射关系
     *
     * @param id 往来单位映射关系主键
     * @return 往来单位映射关系
     */
    CustomerMapping selectCustomerMappingById(Long id);

    /**
     * 查询往来单位映射关系列表
     *
     * @param customerMapping 往来单位映射关系
     * @return 往来单位映射关系集合
     */
    List<CustomerMapping> selectCustomerMappingList(CustomerMapping customerMapping);

    /**
     * 新增往来单位映射关系
     *
     * @param customerMapping 往来单位映射关系
     * @return 结果
     */
    AjaxResult insertCustomerMapping(CustomerMapping customerMapping);

    /**
     * 修改往来单位映射关系
     *
     * @param customerMapping 往来单位映射关系
     * @return 结果
     */
    AjaxResult updateCustomerMapping(CustomerMapping customerMapping);

    /**
     * 批量删除往来单位映射关系
     *
     * @param ids 需要删除的往来单位映射关系主键集合
     * @return 结果
     */
    AjaxResult deleteCustomerMappingByIds(Long[] ids);

    /**
     * 删除往来单位映射关系信息
     *
     * @param id 往来单位映射关系主键
     * @return 结果
     */
    AjaxResult deleteCustomerMappingById(Long id);

    /**
     * 创建映射关系
     *
     * @param msfxCustomerId 码上放心客户ID
     * @param msfxCustomerName 码上放心客户名称
     * @param msfxEntId 码上放心企业ID
     * @param erpCustomerCode ERP客户编码
     * @param erpCustomerName ERP客户名称
     * @param erpDanwbh ERP单位编号
     * @param remark 备注
     * @return 结果
     */
    AjaxResult createMapping(String msfxCustomerId, String msfxCustomerName, String msfxEntId,
                           String erpCustomerCode, String erpCustomerName, String erpDanwbh, String remark);

    /**
     * 批量创建映射关系（一个码上放心客户对应多个ERP客户）
     *
     * @param msfxCustomerId 码上放心客户ID
     * @param msfxCustomerName 码上放心客户名称
     * @param msfxEntId 码上放心企业ID
     * @param erpCustomerCodes ERP客户编码数组
     * @param erpCustomerNames ERP客户名称数组
     * @param erpDanwbhs ERP单位编号数组
     * @param remark 备注
     * @return 结果
     */
    AjaxResult createBatchMapping(String msfxCustomerId, String msfxCustomerName, String msfxEntId,
                                String[] erpCustomerCodes, String[] erpCustomerNames, String[] erpDanwbhs, String remark);

    /**
     * 审核映射关系
     *
     * @param id 映射关系ID
     * @param auditStatus 审核状态
     * @param auditRemark 审核备注
     * @return 结果
     */
    AjaxResult auditMapping(Long id, Integer auditStatus, String auditRemark);

    /**
     * 获取已映射的码上放心客户ID列表
     *
     * @return 客户ID列表
     */
    List<String> getMappedMsfxCustomerIds();

    /**
     * 获取已映射的ERP客户编码列表
     *
     * @return 客户编码列表
     */
    List<String> getMappedErpCustomerCodes();

    /**
     * 解除映射关系
     *
     * @param mappingId 映射关系ID
     * @return 结果
     */
    AjaxResult removeMapping(Long mappingId);
}
